package com.DFB.common;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class Generator {
    public static void main(String[] args) {
        AutoGenerator autoGenerator = new AutoGenerator();

        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUrl("jdbc:mysql://liyuu.cloud/dfb")
                .setUsername("DFB_dev")
                .setPassword("WU3w7dK.f[X6xz;4I1hs*90PFS^D}c5o");

        autoGenerator.setDataSource(dataSourceConfig);

        //设置全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig
                .setOutputDir(System.getProperty("user.dir") + "/src/main/java")//设置代码生成目录,"user.dir"代表当前项目
                .setOpen(false)//设置生成完毕后是否打开生成代码所在的目灵
                .setAuthor("DFB")//设置作者
                .setFileOverride(false)//设置是否覆盖原始生成的文件
                .setIdType(IdType.ASSIGN_ID)//设置Id生成策略
                .setMapperName("%spojo")//设置数据层接口名, %s 为占位符, 指代模块名称
                .setMapperName("%sMapper")
                .setXmlName("%sMapper")
                .setServiceName("%sService")
                .setServiceImplName("%sServiceImpl")
                .setControllerName("%sController");

        autoGenerator.setGlobalConfig(globalConfig);

        //设置包名相关配置
        PackageConfig packageInfo = new PackageConfig();
        packageInfo
                .setParent("com.DFB")//设置生成的包名, 与代码所在位置不冲突, 二者叠加组成完整路径
                .setEntity("pojo")//设置实体类包名
                .setMapper("mapper")
                .setXml("mapper.xml")
                .setService("service")
                .setServiceImpl("service.impl")
                .setController("controller");

        autoGenerator.setPackageInfo(packageInfo);

        //策略设置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig

                .setInclude("product")//没置当前参与生成的表名, 默认全部
                //.setTablePrefix("store_")//设置数库表的前缀名称, 模块名 = 数据库表名 - 前缀名
                .setRestControllerStyle(true)//设置是否启用Rest风格
                .setNaming(NamingStrategy.underline_to_camel) // 设置字段名的命名策略
                .setVersionFieldName("version")//设置乐观锁字段名
                .setLogicDeleteFieldName("isExist")//设置逻辑删除字段名
                .setEntityLombokModel(true);//设置是否启用Lombok

        autoGenerator.setStrategy(strategyConfig);

        autoGenerator.execute();
    }
}